package gui;

import gui.nodes.AbstractNode;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import persistence.db.DataSet;

import business.MatiereBL;
import business.UEBL;
import business.SEEBL;

public class MatiereUIConsulter extends AbstractViewPane {

	private ViewMode currentViewMode;
		
	//champs du formulaire
	private JTextField textFieldNom;
	private JTextField textFieldCoeff;
	private JButton buttonCouleur;
	private JTextArea textAreaDesc;
	
	private ComponentList componentList = new ComponentList();
    
	//variables d'affichage du formulaire
	private int id = -1;
	private int ueId;
	private String nom = ""; 
	private String ancienNom = ""; 
	private float coeff = 0; 
	private Color couleur = new Color(0x7F); /* Gris par defaut */ 
	private String desc = ""; 
	private DataSet SEESet = null;
	private AbstractNode creator;
	

	
	public MatiereUIConsulter(AbstractNode creator, ViewMode v, int matiereId, int ueId) {
		this.creator = creator;
		currentViewMode = v;
		id = matiereId;
		this.ueId = ueId;
		initGUI(matiereId);
	}
	
	private void showCommandBox() {
		JPanel commandBox = new JPanel();
		JButton save = new JButton("Enregistrer");
		save.setActionCommand("Enregistrer");
		save.addActionListener(new MatiereListener());
		commandBox.add(save);
		drawCommandBox(commandBox);
	}
	
	private void initGUI(int matiereId) {
		
		MatiereBL matiereBL;

        if(currentViewMode != ViewMode.AJOUT) {
        	//si on est en consultation ou modification (recuperation des elements en base)
        	matiereBL = new MatiereBL(matiereId);
        	id = matiereId;
		    nom = matiereBL.getNomMatiere();
		    ancienNom = nom;
		    coeff = matiereBL.getCoeffDivise();
		    couleur = matiereBL.getCouleur();
		    desc = matiereBL.getDescriptionMatiere();
        }
		
        JPanel p = new JPanel(new SpringLayout());
        
        JLabel lnom = new JLabel("Nom : ", JLabel.TRAILING);
        p.add(lnom);
		lnom.setLabelFor(textFieldNom);
		
		textFieldNom = new JTextField(nom);
        p.add(textFieldNom);
        componentList.add(textFieldNom);
		
        JLabel lcoeff = new JLabel("Coefficient divisé : ", JLabel.TRAILING);
        p.add(lcoeff);
		lcoeff.setLabelFor(textFieldCoeff);
		
		textFieldCoeff = new JTextField(String.valueOf(coeff));
        p.add(textFieldCoeff);
        componentList.add(textFieldCoeff);
		
        JLabel lcouleur = new JLabel("Couleur : ", JLabel.TRAILING);
        p.add(lcouleur);
		lcouleur.setLabelFor(buttonCouleur);
		
		buttonCouleur = new JButton(); buttonCouleur.addActionListener(new MatiereListener());
        //buttonCouleur.setBackground(Color.decode(couleur));
        buttonCouleur.setOpaque(true);
        p.add(buttonCouleur);
        componentList.add(buttonCouleur);
		
        JLabel ldesc = new JLabel("Description : ", JLabel.TRAILING);
        p.add(ldesc);
		ldesc.setLabelFor(textAreaDesc);
	    
        textAreaDesc = new JTextArea(desc);
        p.add(textAreaDesc);
		textAreaDesc.setRows(5);
		componentList.add(textAreaDesc);
        
        //Lay out the panel.
        SpringUtilities.makeCompactGrid(p,
                                        4, 2, //rows, cols   +1 pour le textArea
                                        6, 6,        //initX, initY
                                        6, 6);       //xPad, yPad
        
        add(p, BorderLayout.NORTH);
	    
        if (currentViewMode != ViewMode.CONSULTATION) {
        	// Mode modification - afficher les boutons
        	showCommandBox();
        }
        else {
        	componentList.disableAll();
        }
	}
	
	@Override
	public String getTitle() {
		System.out.println("consultation : " + currentViewMode);
		if (currentViewMode == ViewMode.CONSULTATION)
			return "Consultation d'une matière";
		else if (currentViewMode == ViewMode.AJOUT)
			return "Ajout d'une matière";
		else if (currentViewMode == ViewMode.MODIFICATION){
			return "Modification d'une matière";
		}else {
			return "probleme avec le viewmode";
		}
	}

	@Override
	public boolean hasBeenModified() {
		// TODO Auto-generated method stub
		return (currentViewMode != ViewMode.CONSULTATION);
	}
	
	//inner class chargee de gerer l'ecoute du bouton d'enregistrement du formulaire
	private class MatiereListener implements ActionListener {
		
		public void actionPerformed(ActionEvent arg0) {
			
			if (arg0.getSource() == buttonCouleur) {
				Color newColor = MatiereColorChooser.showColorChooser(MainController.getInstance().getFrame());
				buttonCouleur.setBackground(newColor);
			}
			
			if(arg0.getActionCommand().equals("Enregistrer")){
				System.out.println("Demande d'enregistrement");
				MatiereBL matSave = new MatiereBL();
				//si -1, c'est un ajout d'enseignant, sinon modification de l'enseignant de l'id concerne
				if(getId() == -1){
					matSave.ajouterMatiere(getId(), getNom(), getDesc(), getCoeff(),getCouleur(),getIdUE(), getSEESet());
					componentList.disableAll();
				} 
				else{ 
					matSave.modifierMatiere(getId(), getNom(), getDesc(), getCoeff(),getCouleur(),getIdUE(), getSEESet(), ancienNom);
					componentList.disableAll();
				}
				creator.refresh();
			}	
		}
	}
	
	//accesseurs
	public int getId(){
		return id;
	}
	public String getNom(){
		return textFieldNom.getText();
	}
	public float getCoeff(){
		return Float.parseFloat(textFieldCoeff.getText());
	}
	public Color getCouleur(){
		return buttonCouleur.getBackground();
	}
	public String getDesc(){
		return textAreaDesc.getText();
	}
	public int getIdUE(){
		return ueId;
	}
	public DataSet getSEESet(){
		return SEESet;
	}

}
